package my.consumer.demo.Feign;

import my.consumer.demo.vo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.Primary;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;


/**
 * @FeignClient 表情这个是一个feign
 * value 提供方的应用名
 * fallback 熔断方法类
 */
@FeignClient(value = "userProvider", fallback = UserFeignFallback.class)
@Primary
public interface UserFeignClient {

    /**
     *      使用feign需要注意的地方
     *  1.启动类需要加上@EnableFeignClients
     *  2.需要开启熔断的话，配置文件需要加上feign.hystrix.enabled=true
     *  3.fallback来定义熔断的类，熔断的类也需要加入spring容器，使用注解@Component /@Service /@Repository等都可以
     *  4.当定义完feign的熔断类，引入feign的类可能会爆红或报错，可以使用@Primary作用于feign，告诉spring有优先引入这个
     */

    String PATH="user/";

    @GetMapping(PATH+"getUser")
    User getUser(@RequestParam String userId);

    @PostMapping(PATH+"addUser")
    String addUser(@RequestBody User user);
}
